#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;

// class Solution
// {
// public:
//     int dfs(int x, vector<int>& nums)
//     {
//         int res = 0;
//         int n = nums.size();
//         if (x > n)
//         {
//             if (x >= 3)
//                 if (nums[x] - nums[x - 1] == nums[x - 1] - nums[x - 2])
//                     res++;
//             return 0;
//         }
//         res = dfs(x + 1, nums);
//         return res;
//     }
//     int numberOfArithmeticSlices(vector<int>& nums)
//     {
//         int ans = dfs(1, nums);
//         return ans;
//     }
// };
const int N = 10010;
class Solution
{
  public:
    //x表示当前以nums[x]为结尾的数组
    int dfs(int x, vector<int>& nums)
    {
        if (x < 2)
            return 0;
        if (mem[x])
            return mem[x];
        int diff = nums[x] - nums[x - 1];
        int prv_diff = nums[x - 1] - nums[x - 2];
        if (diff == prv_diff)
        {
            return mem[x] = dfs(x - 1, nums) + 1;
        }
        else
        {
            return 0;
        }
    }
    int mem[N];
    
    int numberOfArithmeticSlices(vector<int> &nums)
    {
        int n = nums.size();
        if (nums.size() < 3)
            return 0;
        // vector<int> dp(n, 0);
        int res = 0;
        int prev = 0;
        // for (int i = 2; i < nums.size(); i++)
        // {
        //     res += dfs(i, nums);
        // }
        // return res;
        for (int i = 2; i < nums.size(); i++)
        {
            if (nums[i] - nums[i - 1] == nums[i - 1]- nums[i - 2])
            {
                // dp[i] = dp[i - 1] + 1;
                prev = prev + 1;
                res += prev;
            }
        }
        return prev;
    }
};

void test1()
{
    Solution p1;
    vector<int> nums1 = {1, 2, 3, 4};
    cout << p1.numberOfArithmeticSlices(nums1) << endl;
}
int main()
{
    test1();
    return 0;
}